console.log("寄生继承演示")

function Vehicle() {
    this.engines = 1
}

Vehicle.prototype.ignition = function () {
    console.log("点火", this.engines, "个引擎")
}

Vehicle.prototype.drive = function () {
    this.ignition()
    console.log("向前开！！！")
}

function Car() {
    let vehicle = new Vehicle();

    vehicle.engines = 4
    vehicle.wheels = 4
    let parentDrive = vehicle.drive
    vehicle.drive = function () {
        // 寄生继承实现多态
        // 调用时需要传入上下文this
        parentDrive.call(this)
        console.log("car 有", this.wheels, "个轮子")
    }
    return vehicle
}

/**
 * 使用 new Car() 来创建 也可以，并且 Car() 中的 this 会指向 新创建的对象
 * 但是我们在 Car() 中自定义返回了对象，所以 new 出来并绑定到 this 的对象会被丢弃
 * @type {Vehicle}
 */
let car = Car()

car.drive();
